package com.learn.temp.service;

import com.learn.temp.bean.OrderDetail;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class OrderUtil {
    /*
     * 题目描述:
     * 盒马杭州地区有S1,...S10一共十个门店
     * 一个小时内产生了10000笔订单
     * 希望从这些订单中找出每个门店拣货时间最短的topn(n<=3)的订单
     * 要求:
     * 1.方法执行时间<2000ms,并且执行时间越短越好
     * 2.方法为:Map<String, List<String>> getTopPickTimeOderNos4Shtop(List<String> orderNos)
     * 输入的List<String> orderNos为10000个订单编号的列表
     * 辅助方法:
     * List<OrderDetail> getDetails(List<String>orderNos)
     * 方法getDetails的RT时间满足线性关系f(x)=x,其中x为orderN size,单位ms
     * 其中OrderDetail的数据结构为:{orderNo:String,shopName:String,pickTime:long}
     * 输出:
     *   范围Map的数据结构,其中key为shopName,value为每个门店拣货时间最短的top N(N<=3)的订单号列表
     *
     * */

    /**
     * 根据输入订单号列表返回各个门店中拣货时间最短的前三个订单号
     *
     * @param orderNos
     * @return{shopName,[orderNo1,orderNo2,orderNo3]}
     */
    public Map<String, List<String>> getTopPickTimeOderNos4Shtop(List<String> orderNos) {
        Map<String, List<String>> result = new HashMap<>();

        return result;
    }

    private Map<String, List<String>> getTopPickTimeOderNos4Shtop2(List<OrderDetail> orderNos) {
        return null;
    }

    /**
     * 线性时间获取订单编号对应的订单信息,f(x)=x;其中x为订单数量,单位为ms
     *
     * @param orderNos
     * @return
     */
    public List<OrderDetail> getDetails(List<String> orderNos) {
        List<OrderDetail> orderDetails = new ArrayList<>(orderNos.size());
//        orderDetails.stream().collect(Collectors.toCollection(OrderDetail:getStopName));
        return orderDetails;
    }
}
